"""
@Author:   Scott Mark
"""
# -*- coding: utf-8 -*-

import pandas as pd
import matplotlib.pyplot as plt

catering_sale = '../data/catering_sale.xls'  # 餐饮数据
data = pd.read_excel(catering_sale, index_col=u'日期')  # 指定“日期”列为索引列
print(data.describe())  # 给出数据的一些基本统计量

plt.rcParams['font.sans-serif'] = ['SimHei']  # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.figure()
p = data.boxplot(return_type='dict')  # 箱型图，df 对象的方法，必需加括号里返回字典这一参数，否则下面语句会报错
x = p['fliers'][0].get_xdata()  # 'fliers' 即为异常值的标签
y = p['fliers'][0].get_ydata()
y.sort()  # 升序排序，且是 in-place 操作

# 用 annotate 添加注释
# 其中有些相近的点，注解会出现重叠，难以看清，需要一些技巧来控制。
# 以下参数都是经过调试的，需要具体问题具体调试。
for i in range(len(x)):
    if i > 0:
        plt.annotate(y[i], xy=(x[i], y[i]), xytext=(
            x[i] + 0.05 - 0.8 / (y[i] - y[i - 1]), y[i]))
    else:
        plt.annotate(y[i], xy=(x[i], y[i]), xytext=(x[i] + 0.08, y[i]))

plt.show()
